package 剑指offer;

import java.util.HashMap;
import java.util.HashSet;

/**
 * Created by IntelliJ IDEA.
 *
 * @ProjectName leetcode
 * @Author Ding
 * @CreateTime 2022/8/27 10:32 星期六
 */
public class _03_数组中重复的数字 {
    public static void main(String[] args) {
        int[] nums = new int[]{2, 3, 1, 0, 2, 5, 3};
        System.err.println(findRepeatNumber2(nums));
    }

    /**
     * 这种其实也是hash表，比hashset节省4ms
     * > 2022/08/27 10:43:59
     * 解答成功:
     * 	执行耗时:1 ms,击败了79.71% 的Java用户
     * 	内存消耗:49 MB,击败了57.32% 的Java用户
     * @param nums
     * @return
     */
    private static int findRepeatNumber2(int[] nums) {
        int[] ints = new int[nums.length];
        for (int num : nums) {
            if (ints[num] > 0) {
                return num;
            }
            ints[num]++;
        }
        return -1;
    }


    /**
     * hashset，万金油
     * @param nums
     * @return
     */
    public static int findRepeatNumber(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            if (!set.add(num)) {
                return num;
            }
        }
        return -1;
    }
}
